perm filename INIT.LCS[IRC,LCS] blob
sn#273057 filedate 1977-03-30 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00006 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 COMMENT: ******INITIALIZATION FILE FOR MUSIC.DMP******** 3/77
C00005 00003 FUNCTION SEG(ARRAY FUNC)
C00007 00004 FUNCTION SYNTH(ARRAY FUNC)
C00009 00005 <comment: type 'SETMAG nchns, srate'
C00012 00006 <FOUR INSTRUMENTS FOR ELEMENTRY COMPUTER MUSIC (+SIMP)
C00015 ENDMK
C⊗;
COMMENT: ******INITIALIZATION FILE FOR MUSIC.DMP******** 3/77
TO CREATE MUSIC.DMP RUN COMMAND FILE, 'LCSMUS.CMD',
THEN READ IN THIS FILE BEFORE SAVING ON THE SYSTEM.
THE FOLLOWING FUNCTIONS ARE SET UP HEREIN:
SEE(ARRAY FUNC)
SEG(ARRAY FUNC)
SYNTH(ARRAY FUNC)
POWER( N, X ) [GIVES POWER OF N TO THE XTH] ;
VARIABLE MAG,C,CF,CS,D,DF,DS,E,EF,ES,F,FF,FS,G,GF,GS,A,AF,AS,B,BF,BS;
C←261.62; CS←DF←277.18; D←293.66; DS←EF←311.13; E←FF←329.63;
F←ES←349.23; FS←GF←369.99; G←391.99; GS←AF←415.31;
A←440; AS←BF←466.16; B←493.89; CF←B/2; BS←C*2;
EXTERNAL FUNCTION
SIN(A), EXP(A), ALOG(A), SQRT(A), RDNUM(X),
DPYSET(INTEGER POG,ARRAY DPYBUF,INTEGER SIZE),
ALINE(INTEGER X1,INTEGER Y1,INTEGER X2,INTEGER Y2),
DPYOUT(INTEGER POG), DDCLR, NOTDD(INTEGER K),
AIVECT(INTEGER X,INTEGER Y), SIND(X),
TYPLOC(INTEGER X,INTEGER Y), RVECT(INTEGER X,INTEGER Y);
FUNCTION SEE(ARRAY FUNC);
BEGIN
ARRAY DPY(225); VARIABLE IY,I,IY2;
DDCLR; DPYSET(2,DPY,225); TYPLOC(-100,-412);
COMMENT THIS VERSION MUST BE LOADED WITH %LTVRLIB (FOR 'DDCLR')
TYPLOC MOVES ONLY WHEN USING DATADISC.;
IF NOTDD(I) ≥ 0 THEN TYPLOC(-100,-412);
ALINE(-264,200,256,200); ALINE(-266,328,-246,328);
ALINE(-266,456,-246,456); ALINE(-266,72,-246,72);
ALINE(-266,-56,-246,-56); ALINE(-256,-56,-256,456);
ALINE(0,190,0,210); ALINE(-128,190,-128,210);
ALINE(128,190,128,210);
IY←INT(FUNC(0)*256.0+200.0); AIVECT(-256,IY);
COMMENT: DISPLAY ONLY EVERY THIRD SEGMENT ;
FOR I←1 STEP 3 UNTIL 511 DO
BEGIN
IY2←INT(FUNC(I)*256.0+200.0);
RVECT(3,IY2-IY); IY←IY2;
END; DPYOUT(2);
END;
FUNCTION SEEIT(ARRAY FUNC); BEGIN
VARIABLE K; PRINT "SEG ARRAY ";
IF NOTDD(K) < 0 THEN SEE(FUNC);
END;
FUNCTION SEG(ARRAY FUNC);
BEGIN
VARIABLE X512,K,A1,A2,ST,STPP,STPS,IS,IT,DIF,RK;
A1←0; ST←0; STPP←0; X512←0;
WHILE STPP ≤ 1 DO
BEGIN
RDNUM(A2);
IF A2 =512 THEN X512←A2;
IF A2 =512 THEN RDNUM(A2); RDNUM(STPP);
COMMENT: TYPE 512 AT FIRST TO USE 512 STEPS INSTEAD OF 100 STEPS.;
IF STPP ≤ 1 THEN A1←A2;
END;
WHILE STPP ≠ 999 DO
BEGIN
IS← INT(STPP*5.120+.0001);
IF X512 ≠ 0 THEN IS←INT(STPP+.0001);
IF IS > 512 THEN
BEGIN
FOR K←0 STEP 1 UNTIL 511 DO
COMMENT: READ 512 NUMS FROM A FUNC FILE.;
BEGIN
RDNUM(RK); FUNC(K)← RK;
END;
SEEIT(FUNC); RETURN;
END;
STPP ← IS-1; STPS ← STPP-ST;
IS ← INT(STPS); DIF←A2-A1;
IT←INT(ST); ST ← STPP;
FOR K←0 STEP 1 UNTIL IS DO
BEGIN
RK ← K;
FUNC(K+IT) ← A1+DIF*RK/STPS;
END;
IF STPP = 511 THEN SEEIT(FUNC);
IF STPP ≥ 511 THEN RETURN;
A1←A2; ST←STPP;
RDNUM(A2); RDNUM(STPP);
END;
END;
FUNCTION SYNTH(ARRAY FUNC);
BEGIN
VARIABLE K,XX,H,FAC,CON,AMP,X,XK,J;
FOR J ← 0 STEP 1 UNTIL 511 DO BEGIN
FUNC(J) ← 0; END;
COMMENT: CLEAR THE ARRAY;
RDNUM(XX); IF XX = 99 THEN XX ← -XX;
H ← XX; IF XX < 0 THEN RDNUM(H);
WHILE H ≠ 999 DO
BEGIN
RDNUM(AMP);
X ←0; CON ←0;
IF XX < 0 THEN
BEGIN
RDNUM(X); RDNUM(CON);
COMMENT X ← X * 1.42222222 +1 ; COMMENT 1.422 = 512/360 ;
X ← X * 512/360 +1;
END;
FOR J ← 0 STEP 1 UNTIL 511 DO
BEGIN
XK ← SIND(X*360/512) * AMP + CON;
COMMENT: .703125 = 360/512 ; XK ← SIND(X*.703125) * AMP + CON ;
IF CON ≥ 100 THEN FUNC(J) ← (XK-100)*FUNC(J) ;
IF CON < 100 THEN FUNC(J) ← FUNC(J) + XK ;
X ← X+H; IF X > 512 THEN X ← X-512;
END;
RDNUM(H);
END;
X ← FUNC(0); COMMENT: NEXT FOR NORMALIZATION;
FOR J ← 1 STEP 1 UNTIL 511 DO BEGIN H ← ABS(FUNC(J));
IF X < H THEN X ← H; END;
FOR J ← 0 STEP 1 UNTIL 511 DO BEGIN FUNC(J) ← FUNC(J) / X ; END;
PRINT "SYNTH ARRAY "; IF NOTDD(K) < 0 THEN SEE(FUNC);
END;
FUNCTION POWER(X,N)=EXP(N*ALOG(X)); comment nth power of x;
<comment: type 'SETMAG; nchns, srate' ;
FUNCTION MAGERR(X);
BEGIN PRINT "IMPROPER INPUT. "; X←0;
print "Type number of channels and sample rate: ";
END;
FUNCTION ADJRATE; BEGIN
IF SRATE < 6400 THEN BEGIN
IF SRATE = 1 THEN SRATE ← 12800; IF SRATE = 2 THEN SRATE ← 25600;
IF SRATE = 3 THEN SRATE ← 51200; IF SRATE = 4 THEN SRATE ← 102400;
IF SRATE = 5 THEN SRATE ← 204800; IF SRATE <10 THEN SRATE ← 6400;
IF SRATE <20 THEN SRATE ← 12800; IF SRATE <50 THEN SRATE ← 25600;
IF SRATE <100 THEN SRATE ← 51200; IF SRATE <200 THEN SRATE ← 102400;
IF SRATE <400 THEN SRATE ← 204800;
COMMENT: YOU MAY TYPE 1 OR 12 FOR 12800, ETC.;
END; END;
Function SETMAG;
begin
VARIABLE X; X←0;
WHILE X = 0 DO
BEGIN X←1; rdnum(nchns); rdnum(srate);
IF NCHNS > 4 THEN MAGERR(X);
IF NCHNS = 3 THEN MAGERR(X);
IF NCHNS < 1 THEN MAGERR(X);
ADJRATE;
COMMENT: ONLY 6400, 12800, ETC. ARE ACCEPTED;
IF INT(SRATE/6400+.1) ≠ SRATE/6400 THEN MAGERR(X);
END;
SPEED←INT(ALOG(SRATE/6400)/ALOG(2)+.1); mag←512/srate;
PRINT "NCHNS=",NCHNS," SRATE=",SRATE," SPEED=",SPEED;
end;
<SRATE←12800;MAG←512/SRATE;NCHNS←1;
SETMAG; 1 12.8;
Function SETCLOCK;
begin
print "Number of channels: ";
rdnum(nchns);
print "Clock rate: ";
rdnum(srate);
if srate<100 then srate←srate*1000;
mag←512/srate;
end;
<FOUR INSTRUMENTS FOR ELEMENTRY COMPUTER MUSIC (+SIMP)
INSTRUMENT SIMP;
OUTA←OUTA+ZOSCIL(P4,MAG*P3,P5);
END;
INSTRUMENT TOOT;
OSCIL[10](P4,10*MAG/P2,P5);
COSCIL(U1,P3*MAG,P6);<P6 IS TONE COLOR FOR 'TOOT'
OUTA←OUTA+U2;END;
INSTRUMENT CLAR;
OSCIL[10](P4,10*MAG/P2,P5);
COSCIL(U1,P3*MAG,P7);< P7 IS TONE COLOR FOR 'CLAR'
OUTA←OUTA+U2;END;
INSTRUMENT BRIT;
OSCIL[10](P4,10*MAG/P2,P5);
COSCIL(U1,P3*MAG,P8);< P8 IS TONE COLOR FOR 'BRIT'
OUTA←OUTA+U2;END;
INSTRUMENT BUZZ;
OSCIL[10](P4,10*MAG/P2,P5);
COSCIL(U1,P3*MAG,P9);< P9 IS TONE COLOR FOR 'BUZZ'
OUTA←OUTA+U2;END;
ARRAY F1,F2,F3,F4,F5,F6(512);
SEG(F1);.9 6,1 11 .9 82 .7 90 0 100; < MEZZO LEGATO
SEG(F2);1 3,1 11,.4 31,.1 51,0 100; < STACCATO
SYNTH(F3);1 1 999; < TOOT - SINE WAVE (USED FOR SIMP ALSO)
SYNTH(F4);1,.5 3,.3 5,.2 7,.1 999; < CLAR
SYNTH(F5);1,.3 2,.4 3,.2 8,.2 12 .1 999; < BRIT
SEG(F6);-1,1 1,7 -1,14 -1,100; < BUZZ
<<<<<<<<P3←A; P4←2000; P5←F1; COMMENT: SIMP parameter default. ;
<<<<<**OLD SPECS.**** OUTSPEC←"TEST.SND/BYTESIZE=12/SOUND";
OUTSPEC←"TEST.SND/BYTESIZE=12/HEADER/PLAY";
<<<OUTSPEC←"TEST.SND/BYTESIZE=12/PLAY";
NO_MSG←1; < THESE 2 LINES SET UP "EZPLAY" FEATURES.
PLAY;TOOT 0 .12 C 1000 F1 F3 F4 F5 F6 0;
CLAR .12;BRIT .24;BUZZ .36;
PLAY;SIMP 0 .5 A 1000 F3;FINISH;